clear all; close all; clc;

% 设置参数
r = 1;           % 圆的半径
omega = 2*pi;    % 角速度
fs = 100;        % 采样频率
t = 0:1/fs:4;    % 时间向量
x = r*cos(omega*t);  % x坐标
y = r*sin(omega*t);  % y坐标

% 计算频域
L = length(x);
f = fs*(0:(L/2))/L;
X = fft(x);
P2 = abs(X/L);
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1);

% 创建图形窗口
figure('Position', [100, 100, 1200, 500]);

% 主循环
for i = 1:length(t)
    % 清除之前的图形
    clf;
    
    % 绘制圆和运动点
    subplot(2,2,[1,3]);
    plot(x, y, 'b');
    hold on;
    plot(x(i), y(i), 'ro', 'MarkerSize', 10, 'MarkerFaceColor', 'r');
    plot([x(i) x(i)], [y(i) -1.5], 'r--');
    plot([-1.5 1.5], [0 0], 'k-', 'LineWidth', 1);  % x轴
    axis equal;
    xlim([-1.5 1.5]); ylim([-1.5 1.5]);
    title('圆周运动及其x轴投影');
    xlabel('x'); ylabel('y');
    
    % 绘制在x轴上的投影
    subplot(2,2,2);
    plot(t(1:i), x(1:i), 'b');
    hold on;
    plot(t(i), x(i), 'ro', 'MarkerSize', 10, 'MarkerFaceColor', 'r');
    plot([t(i) t(i)], [x(i) 0], 'r--');
    xlim([0 4]); ylim([-1.5 1.5]);
    title('x轴投影 (时域)');
    xlabel('时间 (s)'); ylabel('振幅');
    
    % 绘制频域图
    subplot(2,2,4);
    stem(f, P1);
    xlim([0 5]);
    title('频域图');
    xlabel('频率 (Hz)'); ylabel('|P1(f)|');
    
    % 更新图形
    drawnow;
    
    % 可选：保存为gif
    % 如果你想保存为gif，取消下面几行的注释
    % frame = getframe(gcf);
    % im = frame2im(frame);
    % [imind,cm] = rgb2ind(im,256);
    % if i == 1
    %     imwrite(imind,cm,'circle_projection.gif','gif', 'Loopcount',inf,'DelayTime',0.05);
    % else
    %     imwrite(imind,cm,'circle_projection.gif','gif','WriteMode','append','DelayTime',0.05);
    % end
end
